import logging
import sys

def setup_logging():
    """
    配置日志系统，保证有日志输出且不重复
    """
    # 清除root logger的处理器
    root = logging.getLogger()
    for handler in root.handlers[:]:
        root.removeHandler(handler)
    
    # 创建控制台处理器
    console_handler = logging.StreamHandler(sys.stdout)
    console_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    console_handler.setFormatter(console_formatter)
    console_handler.setLevel(logging.DEBUG)  # 确保处理器级别是DEBUG
    
    # 配置root logger
    root.setLevel(logging.INFO)
    root.addHandler(console_handler)
    
    # 配置uvicorn和fastapi日志级别，避免过多日志
    logging.getLogger("uvicorn").setLevel(logging.WARNING)
    logging.getLogger("fastapi").setLevel(logging.WARNING)
    
    # 配置passlib日志级别，避免bcrypt警告
    logging.getLogger("passlib").setLevel(logging.ERROR)
    
    # 为应用模块设置更详细的日志级别
    app_logger = logging.getLogger("app")
    app_logger.setLevel(logging.DEBUG)  # 应用日志使用DEBUG级别
    
    # 为 app.utils 命名空间设置 DEBUG 级别
    utils_logger = logging.getLogger("app.utils")
    utils_logger.setLevel(logging.DEBUG)
    
    # 为 MinIO 客户端设置专门的日志级别
    minio_logger = logging.getLogger("app.utils.minio_client")
    minio_logger.setLevel(logging.DEBUG)
    
    return app_logger 